﻿/*
描述
给你一个整数n，按要求输出n∗n的回型矩阵
输入描述：
输入一行，包含一个整数n

1<=n<=19
输出描述：
输出n行，每行包含n个正整数.
*/
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int a[n][n];
//	int i = 0;
//	int j = 0;
//	int count = 0;
//	int num = 1;
//	while (num <= n * n)
//	{
//		if (n  != 1)
//		{
//			if (n % 2 == 0)
//			{
//				for (j = count; j <n - count - 1; j++)
//				{
//					a[count][j] = num;
//					num++;
//				}
//				// j == n - 1
//				for (i = count; i < n - count - 1; i++)
//				{
//					a[i][j] = num;
//					num++;
//				}
//				// i == n - 1
//				for (j = n - count - 1; j > count; j--)
//				{
//					a[i][j] = num;
//					num++;
//				}
//				//j = 0;
//				for (i = n - count - 1; i > count; i--)
//				{
//					a[i][j] = num;
//					num++;
//				}
//				count++;
//			}
//			else
//			{
//				//奇数
//				//i = count
//				for (j = count; j <n - count-1; j++)
//				{
//					a[count][j] = num;
//					num++;
//				}
//				// j == n - 1 - count
//				for (i = count; i < n - count - 1; i++)
//				{
//					a[i][j] = num;
//					num++;
//				}
//				// i == n - 1 - count
//				for (j = n - count - 1; j > count; j--)
//				{
//					a[i][j] = num;
//					num++;
//				}
//				//j = count;
//				for (i = n - count - 1; i > count; i--)
//				{
//					a[i][j] = num;
//					num++;
//				}
//				count++;
//				if (num == n*n)
//				{
//					a[count][count] = num++;	
//				}
//			}
//		}
//		else
//		{
//			a[count][count] = num;
//			break;
//		}
//	}
//	for (i = 0 ; i < n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//}

/*
给你一个整数n，输出n∗n的蛇形矩阵。
输入描述：
输入一行，包含一个整数n
输出描述：
输出n行，每行包含n个正整数，通过空格分隔。

1<=n<=1000
*/

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int a[n][n];
//	int i = 0;
//	int j = 0;
//	int num = 1;
//	int count = 0;
//	a[0][0] = num++;
//	//改了while里面的条件
//	while (num <= n*n)
//	{
//		if (j != (n-1))
//		{
//			j++;
//			a[i][j] = num++;
//		}
//		else
//		{
//			i++;
//			a[i][j] = num++;
//			count++;
//		}
//		while (j != count)
//		{
//			j--;
//			i++;
//			a[i][j] = num++;
//		}
//		//问题
//		if (i != (n-1))
//		{
//			i++;
//			a[i][j] = num++;
//		}
//		else
//		{
//			j++;
//			a[i][j] = num++;
//			count++;
//		}
//		while (i != count)
//		{
//			i--;
//			j++;
//			a[i][j] = num++;
//		}
//	}
////	a[n-1][n-1] = n*n;
//	for (i = 0; i <n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//}
//#include <stdio.h>
//int main() {
//	int n = 0;
//	scanf("%d", &n);
//	int a[n][n];
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < n; i++)
//	{
//		for (j=0; j<n; j++)
//		{
//			scanf("%d", &a[i][j]);
//		}
//	}
//	int flag = 0;
//	for (i = 1; i < n; i++)
//	{
//		for (j = 0; j < i; j++)
//		{
//			if (a[i][j] != 0)
//			{
//				goto end;
//			}
//			else
//			{
//				flag = 1;
//			}
//		}
//	}
//	if (flag)
//	{
//		printf("YES\n");
//		
//	}
//end:
//	printf("NO\n");
//	
//	return 0;
//}

/*
第一行包含两个整数n和m，表示一个矩阵包含n行m列，用空格分隔。 (1≤n≤10,1≤m≤10)

从2到n+1行，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示第一个矩阵中的元素。
接下来一行输入k，表示要执行k次操作（1≤k≤5）。接下来有k行，每行包括一个字符t和两个数a和b，中间用空格格分隔，t代表需要执行的操作，当t为字符'r'时代表进行行变换，当t为字符'c'时代表进行列变换，a和b为需要互换的行或列（1≤a≤b≤n≤10，1≤a≤b≤m≤10）。

提示：当t为别的字符时不需要处理
输出描述：
输出n行m列，为矩阵交换后的结果。每个数后面有一个空格。
*/

#include <stdio.h>

int main() {
	int n = 0;
	int m = 0;

	int i = 0;
	int j = 0;
	scanf("%d %d", &n, &m);
	int arr[n][m];
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	int k = 0;
	scanf("%d", &k);

	int a = 0;
	int b = 0;
	char ch = 0;
	int temp = 0;
	for (i = 0; i < k; i++)
	{
		scanf("%c %d %d", &ch, &a, &b);
	}
	printf("%c\n", ch);
	printf("%d\n", a);
	printf("%d\n", b);
	while (k)
	{
		if (ch == 'r')
		{
			for (i = 0; i < n; i++)
			{
				if (i == (a - 1))
				{
					for (j = 0; j < m; j++)
					{
						temp = arr[a - 1][j];
						arr[a - 1][j] = arr[b - 1][j];
						arr[b - 1][j] = temp;
					}
				}

			}
		}
		temp = 0;
		if (ch == 'c')
		{
			for (i = 0; i < n; i++)
			{
				for (j = 0; j < m; j++)
				{
					if (j == (a - 1))
					{
						temp = arr[i][a - 1];
						arr[i][a - 1] = arr[i][b - 1];
						arr[i][b - 1] = temp;
					}

				}
			}
		}
		k--;
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}